package com.mlh.queque;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author 缪林辉
 * @date 2024/3/21 11:08
 * @DESCRIPTION
 */
//思路：
// 1、两个队列：加入一个元素，就先放入队列A中，然后将队列B的元素都进入队列A，形成栈的元素顺序
// 然后队A和队B转换一下引用，让队列B作为主要队列，去弹出首元素 和 查看首元素
// 2、一个队列：
public class MyStack {

    Queue<Integer> queue1; // 和栈中保持一样元素的队列
    Queue<Integer> queue2; // 辅助队列

    /** Initialize your data structure here. */
    public MyStack() {
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }

    /** Push element x onto stack. */
    public void push(int x) {
        queue2.offer(x);
        while(!queue1.isEmpty()){
            queue2.offer(queue1.poll());
        }
        //转换queue1 和 queue2 指针指向的对象地址
        Queue<Integer> temp=queue1;
        queue1=queue2;
        queue2=temp;
    }

    /** Removes the element on top of the stack and returns that element. */
    public int pop() {
        return queue1.poll(); // 因为queue1中的元素和栈中的保持一致，所以这个和下面两个的操作只看queue1即可
    }

    /** Get the top element. */
    public int top() {
        return queue1.peek();
    }

    /** Returns whether the stack is empty. */
    public boolean empty() {
        return queue1.isEmpty();
    }
}
